# -*- coding: UTF-8 -*-

"""
@author: 肥仔编程
@file:08.py
@time:2021-04-22
"""

"""
    函数的使用
        1. 函数的声明
        2. lambda 表达式的理解
"""

"""
    函数声明
        1. 一般函数的声明和定义
        2. 带默认值函数的声明，可以在调用函数时省略一些参数值，采用默认值处理
        3. 位置可变参数函数声明， *args 中 args 并不是位置指定的，我们可以输入自定义的内容
        4. 关键字可变参数， **kwargs 中 kwargs 并不是位置指定的，我们可以输入自定义的内容
"""
# 一般函数定义
def sayHi(userName, age, sex):
    print(f"嗨，大家好，我是{userName}, 今年{age}， 是一个小孩{sex}")
# 按照位置输入函数
sayHi("zhangsan", "12", "nan")
# 通过参数名输入函数
sayHi(userName="zhangsan", sex="nan", age="12")

# 定义函数时使用默认值
def sayHi(userName, age, sex = '男'):
    print(f"嗨，大家好，我是{userName}, 今年{age}， 是一个小孩{sex}")

# 位置可变参数，返回一个元组
def nums(*args):
    print(args)
nums("12", "scott")

# 关键字可变参数，返回一个字典
def teams(**kwargs):
    print(kwargs)
teams(name="Moke", age="12", sex="男")

"""
     lambda 表达式
        在函数中包含一个返回值并且只有一行代码时，可以使用 这种方式，简化编码
        语法 lambda 参数 ： 表达式
"""
# 无参
def add():
    return 1314
print(add(), (lambda : 1314)())

# 包含参数
def add(a, b):
    return a + b
print(add(12, 13), (lambda a, b : a + b)(12, 13))

# 可变位置参数处理，返回元组
print((lambda *args : args)(12, 13))

# 可变关键字参数处理，返回字典
print((lambda **kwargs : kwargs)(name="张三丰", age = 13))

# 表达式中采用三目运算符
print((lambda a,b : a if a > b else b )(10, 5))
